/**
    ATClab - scriptable Air Traffic Control simulations.
    Copyright (C) 2010 openatclab@gmail.com

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
**/

#include "global.h"

#include <qapplication.h>

#ifdef _WIN32
	#include <assert.h>
#endif



using namespace pact;

////////////////////////////////////////////////////////////////////////////////////////////////////
//
// pact::Global
//
//--------------------------------------------------------------------------------------------------
// construction
//

/*!
 *
 */
Global::Global( QObject* parent, const std::string& name, int value ) 
		: QObject(parent), _name(name), _value(value) 
{};

/*!
 *
 */
Global::~Global() {}


////////////////////////////////////////////////////////////////////////////////////////////////////
//
// pact::GlobalFactory
//
//--------------------------------------------------------------------------------------------------
// [public] static 
//

/*!
 *
 */
Global* GlobalFactory::create_variable( const Experiment *exp, const GlobalStateNode *node ) 
{

	assert(node->parent->type == "global");

	if (node->type == "variable") 
	{
		std::string name = exp->getAttributeValue(node, "name");
		
		if (exp->getAttributeValue(node, "type") == "int") 
		{
			int value = 0;

			if (exp->attributeExists(node, "value"))
			{
				value = exp->getIntegerAttribute(node, "value");
			}
			else if (exp->attributeExists(node, "init"))
			{
				value = exp->getIntegerAttribute(node, "init");
			}

			return new Global(qApp, name, value);
		}
	}

	throw global_variable_error( "cannot construct global variable <" + node->type + ">" );
}

////////////////////////////////////////////////////////////////////////////////////////////////////
